home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / swingall.jar / javax / swing / plaf / basic / BasicTabbedPaneUI$TabbedPaneLayout.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-07-15  |  8.1 KB  |  456 lines

  1. package javax.swing.plaf.basic;
  2.  
  3. import java.awt.Component;
  4. import java.awt.Container;
  5. import java.awt.Dimension;
  6. import java.awt.FontMetrics;
  7. import java.awt.Insets;
  8. import java.awt.LayoutManager;
  9. import java.awt.Rectangle;
  10. import javax.swing.SwingUtilities;
  11.  
  12. public class BasicTabbedPaneUI$TabbedPaneLayout implements LayoutManager {
  13.    // $FF: synthetic field
  14.    private final BasicTabbedPaneUI this$0;
  15.  
  16.    public BasicTabbedPaneUI$TabbedPaneLayout(BasicTabbedPaneUI var1) {
  17.       this.this$0 = var1;
  18.    }
  19.  
  20.    public void addLayoutComponent(String var1, Component var2) {
  21.    }
  22.  
  23.    public void calculateLayoutInfo() {
  24.       int var1 = this.this$0.tabPane.getTabCount();
  25.       this.this$0.assureRectsCreated(var1);
  26.       this.calculateTabRects(this.this$0.tabPane.getTabPlacement(), var1);
  27.    }
  28.  
  29.    protected Dimension calculateSize(boolean var1) {
  30.       int var2 = this.this$0.tabPane.getTabPlacement();
  31.       Insets var3 = this.this$0.tabPane.getInsets();
  32.       Insets var4 = this.this$0.getContentBorderInsets(var2);
  33.       Dimension var5 = new Dimension(0, 0);
  34.       int var6 = var4.top + var4.bottom;
  35.       int var7 = var4.left + var4.right;
  36.       int var8 = 0;
  37.       int var9 = 0;
  38.  
  39.       for(int var10 = 0; var10 < this.this$0.tabPane.getTabCount(); ++var10) {
  40.          Component var11 = this.this$0.tabPane.getComponentAt(var10);
  41.          Dimension var12 = var1 ? var11.getMinimumSize() : var11.getPreferredSize();
  42.          if (var12 != null) {
  43.             var9 = Math.max(var12.height, var9);
  44.             var8 = Math.max(var12.width, var8);
  45.          }
  46.       }
  47.  
  48.       var7 += var8;
  49.       var6 += var9;
  50.       int var15 = 0;
  51.       switch (var2) {
  52.          case 1:
  53.          case 3:
  54.          default:
  55.             var15 = this.preferredTabAreaHeight(var2, var7);
  56.             var6 += var15;
  57.             break;
  58.          case 2:
  59.          case 4:
  60.             var15 = this.preferredTabAreaWidth(var2, var6);
  61.             var7 += var15;
  62.       }
  63.  
  64.       return new Dimension(var7 + var3.left + var3.right, var6 + var3.bottom + var3.top);
  65.    }
  66.  
  67.    protected void calculateTabRects(int var1, int var2) {
  68.       FontMetrics var3 = this.this$0.getFontMetrics();
  69.       Dimension var4 = this.this$0.tabPane.getSize();
  70.       Insets var5 = this.this$0.tabPane.getInsets();
  71.       Insets var6 = this.this$0.getTabAreaInsets(var1);
  72.       int var7 = var3.getHeight();
  73.       int var8 = this.this$0.tabPane.getSelectedIndex();
  74.       boolean var15 = var1 == 2 || var1 == 4;
  75.       int var12;
  76.       int var13;
  77.       int var14;
  78.       switch (var1) {
  79.          case 1:
  80.          default:
  81.             this.this$0.maxTabHeight = this.this$0.calculateMaxTabHeight(var1);
  82.             var12 = var5.left + var6.left;
  83.             var13 = var5.top + var6.top;
  84.             var14 = var4.width - (var5.right + var6.right);
  85.             break;
  86.          case 2:
  87.             this.this$0.maxTabWidth = this.this$0.calculateMaxTabWidth(var1);
  88.             var12 = var5.left + var6.left;
  89.             var13 = var5.top + var6.top;
  90.             var14 = var4.height - (var5.bottom + var6.bottom);
  91.             break;
  92.          case 3:
  93.             this.this$0.maxTabHeight = this.this$0.calculateMaxTabHeight(var1);
  94.             var12 = var5.left + var6.left;
  95.             var13 = var4.height - var5.bottom - var6.bottom - this.this$0.maxTabHeight;
  96.             var14 = var4.width - (var5.right + var6.right);
  97.             break;
  98.          case 4:
  99.             this.this$0.maxTabWidth = this.this$0.calculateMaxTabWidth(var1);
  100.             var12 = var4.width - var5.right - var6.right - this.this$0.maxTabWidth;
  101.             var13 = var5.top + var6.top;
  102.             var14 = var4.height - (var5.bottom + var6.bottom);
  103.       }
  104.  
  105.       int var9 = this.this$0.getTabRunOverlay(var1);
  106.       this.this$0.runCount = 0;
  107.       this.this$0.selectedRun = -1;
  108.       if (var2 != 0) {
  109.          for(int var10 = 0; var10 < var2; ++var10) {
  110.             Rectangle var16 = this.this$0.rects[var10];
  111.             if (!var15) {
  112.                if (var10 > 0) {
  113.                   var16.x = this.this$0.rects[var10 - 1].x + this.this$0.rects[var10 - 1].width;
  114.                } else {
  115.                   this.this$0.tabRuns[0] = 0;
  116.                   this.this$0.runCount = 1;
  117.                   this.this$0.maxTabWidth = 0;
  118.                   var16.x = var12;
  119.                }
  120.  
  121.                var16.width = this.this$0.calculateTabWidth(var1, var10, var3);
  122.                this.this$0.maxTabWidth = Math.max(this.this$0.maxTabWidth, var16.width);
  123.                if (var16.x != 2 + var5.left && var16.x + var16.width > var14) {
  124.                   if (this.this$0.runCount > this.this$0.tabRuns.length - 1) {
  125.                      this.this$0.expandTabRunsArray();
  126.                   }
  127.  
  128.                   this.this$0.tabRuns[this.this$0.runCount] = var10;
  129.                   ++this.this$0.runCount;
  130.                   var16.x = var12;
  131.                }
  132.  
  133.                var16.y = var13;
  134.                var16.height = this.this$0.maxTabHeight;
  135.             } else {
  136.                if (var10 > 0) {
  137.                   var16.y = this.this$0.rects[var10 - 1].y + this.this$0.rects[var10 - 1].height;
  138.                } else {
  139.                   this.this$0.tabRuns[0] = 0;
  140.                   this.this$0.runCount = 1;
  141.                   this.this$0.maxTabHeight = 0;
  142.                   var16.y = var13;
  143.                }
  144.  
  145.                var16.height = this.this$0.calculateTabHeight(var1, var10, var7);
  146.                this.this$0.maxTabHeight = Math.max(this.this$0.maxTabHeight, var16.height);
  147.                if (var16.y != 2 + var5.top && var16.y + var16.height > var14) {
  148.                   if (this.this$0.runCount > this.this$0.tabRuns.length - 1) {
  149.                      this.this$0.expandTabRunsArray();
  150.                   }
  151.  
  152.                   this.this$0.tabRuns[this.this$0.runCount] = var10;
  153.                   ++this.this$0.runCount;
  154.                   var16.y = var13;
  155.                }
  156.  
  157.                var16.x = var12;
  158.                var16.width = this.this$0.maxTabWidth;
  159.             }
  160.  
  161.             if (var10 == var8) {
  162.                this.this$0.selectedRun = this.this$0.runCount - 1;
  163.             }
  164.          }
  165.  
  166.          if (this.this$0.runCount > 1) {
  167.             this.normalizeTabRuns(var1, var2, var15 ? var13 : var12, var14);
  168.             this.this$0.selectedRun = this.this$0.getRunForTab(var2, var8);
  169.             if (this.this$0.shouldRotateTabRuns(var1)) {
  170.                this.rotateTabRuns(var1, this.this$0.selectedRun);
  171.             }
  172.          }
  173.  
  174.          for(int var20 = this.this$0.runCount - 1; var20 >= 0; --var20) {
  175.             int var17 = this.this$0.tabRuns[var20];
  176.             int var18 = this.this$0.tabRuns[var20 == this.this$0.runCount - 1 ? 0 : var20 + 1];
  177.             int var19 = var18 != 0 ? var18 - 1 : var2 - 1;
  178.             if (!var15) {
  179.                for(int var21 = var17; var21 <= var19; ++var21) {
  180.                   Rectangle var23 = this.this$0.rects[var21];
  181.                   var23.y = var13;
  182.                   var23.x += this.this$0.getTabRunIndent(var1, var20);
  183.                }
  184.  
  185.                if (this.this$0.shouldPadTabRun(var1, var20)) {
  186.                   this.padTabRun(var1, var17, var19, var14);
  187.                }
  188.  
  189.                if (var1 == 3) {
  190.                   var13 -= this.this$0.maxTabHeight - var9;
  191.                } else {
  192.                   var13 += this.this$0.maxTabHeight - var9;
  193.                }
  194.             } else {
  195.                for(int var11 = var17; var11 <= var19; ++var11) {
  196.                   Rectangle var22 = this.this$0.rects[var11];
  197.                   var22.x = var12;
  198.                   var22.y += this.this$0.getTabRunIndent(var1, var20);
  199.                }
  200.  
  201.                if (this.this$0.shouldPadTabRun(var1, var20)) {
  202.                   this.padTabRun(var1, var17, var19, var14);
  203.                }
  204.  
  205.                if (var1 == 4) {
  206.                   var12 -= this.this$0.maxTabWidth - var9;
  207.                } else {
  208.                   var12 += this.this$0.maxTabWidth - var9;
  209.                }
  210.             }
  211.          }
  212.  
  213.          this.padSelectedTab(var1, var8);
  214.       }
  215.    }
  216.  
  217.    public void layoutContainer(Container var1) {
  218.       int var2 = this.this$0.tabPane.getTabPlacement();
  219.       Insets var3 = this.this$0.tabPane.getInsets();
  220.       int var4 = this.this$0.tabPane.getSelectedIndex();
  221.       Component var5 = this.this$0.getVisibleComponent();
  222.       this.calculateLayoutInfo();
  223.       if (var4 < 0) {
  224.          if (var5 != null) {
  225.             this.this$0.setVisibleComponent((Component)null);
  226.          }
  227.       } else {
  228.          int var10 = 0;
  229.          int var11 = 0;
  230.          Insets var12 = this.this$0.getContentBorderInsets(var2);
  231.          Component var13 = this.this$0.tabPane.getComponentAt(var4);
  232.          boolean var14 = false;
  233.          if (var13 != null && var13 != var5) {
  234.             if (var5 != null && SwingUtilities.findFocusOwner(var5) != null) {
  235.                var14 = true;
  236.             }
  237.  
  238.             this.this$0.setVisibleComponent(var13);
  239.          }
  240.  
  241.          Rectangle var15 = this.this$0.tabPane.getBounds();
  242.          int var16 = this.this$0.tabPane.getComponentCount();
  243.          if (var16 > 0) {
  244.             int var6;
  245.             int var7;
  246.             switch (var2) {
  247.                case 1:
  248.                default:
  249.                   var11 = this.this$0.calculateTabAreaHeight(var2, this.this$0.runCount, this.this$0.maxTabHeight);
  250.                   var6 = var3.left + var12.left;
  251.                   var7 = var3.top + var11 + var12.top;
  252.                   break;
  253.                case 2:
  254.                   var10 = this.this$0.calculateTabAreaWidth(var2, this.this$0.runCount, this.this$0.maxTabWidth);
  255.                   var6 = var3.left + var10 + var12.left;
  256.                   var7 = var3.top + var12.top;
  257.                   break;
  258.                case 3:
  259.                   var11 = this.this$0.calculateTabAreaHeight(var2, this.this$0.runCount, this.this$0.maxTabHeight);
  260.                   var6 = var3.left + var12.left;
  261.                   var7 = var3.top + var12.top;
  262.                   break;
  263.                case 4:
  264.                   var10 = this.this$0.calculateTabAreaWidth(var2, this.this$0.runCount, this.this$0.maxTabWidth);
  265.                   var6 = var3.left + var12.left;
  266.                   var7 = var3.top + var12.top;
  267.             }
  268.  
  269.             int var8 = var15.width - var10 - var3.left - var3.right - var12.left - var12.right;
  270.             int var9 = var15.height - var11 - var3.top - var3.bottom - var12.top - var12.bottom;
  271.  
  272.             for(int var17 = 0; var17 < var16; ++var17) {
  273.                Component var18 = this.this$0.tabPane.getComponent(var17);
  274.                var18.setBounds(var6, var7, var8, var9);
  275.             }
  276.          }
  277.  
  278.          if (var14 && !this.this$0.requestFocusForVisibleComponent()) {
  279.             this.this$0.tabPane.requestFocus();
  280.          }
  281.       }
  282.  
  283.    }
  284.  
  285.    public Dimension minimumLayoutSize(Container var1) {
  286.       return this.calculateSize(true);
  287.    }
  288.  
  289.    protected void normalizeTabRuns(int var1, int var2, int var3, int var4) {
  290.       boolean var5 = var1 == 2 || var1 == 4;
  291.       int var6 = this.this$0.runCount - 1;
  292.       boolean var7 = true;
  293.       double var8 = (double)1.25F;
  294.  
  295.       while(var7) {
  296.          int var10 = this.this$0.lastTabInRun(var2, var6);
  297.          int var11 = this.this$0.lastTabInRun(var2, var6 - 1);
  298.          int var12;
  299.          int var13;
  300.          if (!var5) {
  301.             var12 = this.this$0.rects[var10].x + this.this$0.rects[var10].width;
  302.             var13 = (int)((double)this.this$0.maxTabWidth * var8);
  303.          } else {
  304.             var12 = this.this$0.rects[var10].y + this.this$0.rects[var10].height;
  305.             var13 = (int)((double)this.this$0.maxTabHeight * var8 * (double)2.0F);
  306.          }
  307.  
  308.          if (var4 - var12 > var13) {
  309.             this.this$0.tabRuns[var6] = var11;
  310.             if (!var5) {
  311.                this.this$0.rects[var11].x = var3;
  312.             } else {
  313.                this.this$0.rects[var11].y = var3;
  314.             }
  315.  
  316.             for(int var14 = var11 + 1; var14 <= var10; ++var14) {
  317.                if (!var5) {
  318.                   this.this$0.rects[var14].x = this.this$0.rects[var14 - 1].x + this.this$0.rects[var14 - 1].width;
  319.                } else {
  320.                   this.this$0.rects[var14].y = this.this$0.rects[var14 - 1].y + this.this$0.rects[var14 - 1].height;
  321.                }
  322.             }
  323.          } else if (var6 == this.this$0.runCount - 1) {
  324.             var7 = false;
  325.          }
  326.  
  327.          if (var6 - 1 > 0) {
  328.             --var6;
  329.          } else {
  330.             var6 = this.this$0.runCount - 1;
  331.             var8 += (double)0.25F;
  332.          }
  333.       }
  334.  
  335.    }
  336.  
  337.    protected void padSelectedTab(int var1, int var2) {
  338.       if (var2 >= 0) {
  339.          Rectangle var3 = this.this$0.rects[var2];
  340.          Insets var4 = this.this$0.getSelectedTabPadInsets(var1);
  341.          var3.x -= var4.left;
  342.          var3.width += var4.left + var4.right;
  343.          var3.y -= var4.top;
  344.          var3.height += var4.top + var4.bottom;
  345.       }
  346.  
  347.    }
  348.  
  349.    protected void padTabRun(int var1, int var2, int var3, int var4) {
  350.       Rectangle var5 = this.this$0.rects[var3];
  351.       if (var1 != 1 && var1 != 3) {
  352.          int var11 = var5.y + var5.height - this.this$0.rects[var2].y;
  353.          int var12 = var4 - (var5.y + var5.height);
  354.          float var13 = (float)var12 / (float)var11;
  355.  
  356.          for(int var14 = var2; var14 <= var3; ++var14) {
  357.             Rectangle var15 = this.this$0.rects[var14];
  358.             if (var14 > var2) {
  359.                var15.y = this.this$0.rects[var14 - 1].y + this.this$0.rects[var14 - 1].height;
  360.             }
  361.  
  362.             var15.height += Math.round((float)var15.height * var13);
  363.          }
  364.  
  365.          var5.height = var4 - var5.y;
  366.       } else {
  367.          int var6 = var5.x + var5.width - this.this$0.rects[var2].x;
  368.          int var7 = var4 - (var5.x + var5.width);
  369.          float var8 = (float)var7 / (float)var6;
  370.  
  371.          for(int var9 = var2; var9 <= var3; ++var9) {
  372.             Rectangle var10 = this.this$0.rects[var9];
  373.             if (var9 > var2) {
  374.                var10.x = this.this$0.rects[var9 - 1].x + this.this$0.rects[var9 - 1].width;
  375.             }
  376.  
  377.             var10.width += Math.round((float)var10.width * var8);
  378.          }
  379.  
  380.          var5.width = var4 - var5.x;
  381.       }
  382.  
  383.    }
  384.  
  385.    public Dimension preferredLayoutSize(Container var1) {
  386.       return this.calculateSize(false);
  387.    }
  388.  
  389.    protected int preferredTabAreaHeight(int var1, int var2) {
  390.       FontMetrics var3 = this.this$0.getFontMetrics();
  391.       int var4 = this.this$0.tabPane.getTabCount();
  392.       int var5 = 0;
  393.       if (var4 > 0) {
  394.          int var6 = 1;
  395.          int var7 = 0;
  396.          int var8 = this.this$0.calculateMaxTabHeight(var1);
  397.  
  398.          for(int var9 = 0; var9 < var4; ++var9) {
  399.             int var10 = this.this$0.calculateTabWidth(var1, var9, var3);
  400.             if (var7 != 0 && var7 + var10 > var2) {
  401.                ++var6;
  402.                var7 = 0;
  403.             }
  404.  
  405.             var7 += var10;
  406.          }
  407.  
  408.          var5 = this.this$0.calculateTabAreaHeight(var1, var6, var8);
  409.       }
  410.  
  411.       return var5;
  412.    }
  413.  
  414.    protected int preferredTabAreaWidth(int var1, int var2) {
  415.       FontMetrics var3 = this.this$0.getFontMetrics();
  416.       int var4 = this.this$0.tabPane.getTabCount();
  417.       int var5 = 0;
  418.       if (var4 > 0) {
  419.          int var6 = 1;
  420.          int var7 = 0;
  421.          int var8 = var3.getHeight();
  422.          this.this$0.maxTabWidth = this.this$0.calculateMaxTabWidth(var1);
  423.  
  424.          for(int var9 = 0; var9 < var4; ++var9) {
  425.             int var10 = this.this$0.calculateTabHeight(var1, var9, var8);
  426.             if (var7 != 0 && var7 + var10 > var2) {
  427.                ++var6;
  428.                var7 = 0;
  429.             }
  430.  
  431.             var7 += var10;
  432.          }
  433.  
  434.          var5 = this.this$0.calculateTabAreaWidth(var1, var6, this.this$0.maxTabWidth);
  435.       }
  436.  
  437.       return var5;
  438.    }
  439.  
  440.    public void removeLayoutComponent(Component var1) {
  441.    }
  442.  
  443.    protected void rotateTabRuns(int var1, int var2) {
  444.       for(int var3 = 0; var3 < var2; ++var3) {
  445.          int var4 = this.this$0.tabRuns[0];
  446.  
  447.          for(int var5 = 1; var5 < this.this$0.runCount; ++var5) {
  448.             this.this$0.tabRuns[var5 - 1] = this.this$0.tabRuns[var5];
  449.          }
  450.  
  451.          this.this$0.tabRuns[this.this$0.runCount - 1] = var4;
  452.       }
  453.  
  454.    }
  455. }
  456.